iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
自我挑戰組

跟著 Go 實戰聖經 一起自學 Go系列 第 3

DAY 3 Go 語言 用 var 宣告變數 (variables)

  • 分享至 

  • xImage
  •  

昨天介紹了 Go 語言環境安裝及印出第一個 Hello World ,今天繼續來介紹用 var 宣告變數!

變數是什麼?

變數就像是一個可以用來暫時存放資料的標籤紙,我將我想存放的資料(值)取個名字(變數名稱),當我想要對這個資料(值)做事時,就可以呼叫這個名字(變數名稱)。

宣告變數需要什麼呢?

正常來說若要宣告一個變數需要滿足以下四個條件:

  1. 宣告變數的 「關鍵字
  2. 變數的「名稱
  3. 變數的「資料型別
  4. 變數的「初始值

啊為何上面是說正常來說呢?因為有些時候,我們可以視情況省略其中幾項條件,接下來就讓我們來認識各種宣告變數的方法吧!

1.用 var 宣告變數

var 就是前面提到宣告變數的第一項關鍵字,用 var 宣告變數是最基本的方式,之後介紹各種宣告變數的方法都是從 var 衍伸的。而最完整正常的宣告方式如下:

<關鍵字> <變數名稱> <資料型別> = <值>
 var name string = "Krystal"

接下來一起正式在昨天練習印 Hello World 的檔案,用 var 宣告變數且印出來吧!
範例1:

package main

import "fmt"

var name string = "Krystal"

func main() { 
    var animal string = "Panda"
	fmt.Println(name, animal)
}

範例1 (執行結果):

Krystal Panda

到這邊不知道大家會不會跟我有一樣的疑問,為什麼 name, animal 一個是在 func main() 裡面,一個是在外面呢?兩者有什麼樣的差異呢?
這個就有關於 變數作用範圍 (scope) 的問題,後面文章會有詳細介紹,這邊先簡單理解為,在不同地方宣告變數,可能會有不同的寫法,以及影響這個變數運作的範圍。

補充:
在 Go 語言中,若是有宣告一個變數,但完全沒有使用到此變數的狀況,在編譯時便會產生 『 declared but not used 』 此錯誤訊息。
這是為了避免開發者宣告一些不必要的變數,而浪費多餘的記憶體空間。

2.用 var 一次宣告多個變數

上面範例我們學習了,用 var 宣告一個變數,若想用 var 一次宣告多個不同型別、不同初始值的變數也是 ok 的!

var (  //宣告多個變數時,記得加上小括號
    <變數名稱 1> <資料型別 1> = <值 1>
    <變數名稱 2> <資料型別 2> = <值 2>
    ...
    <變數名稱 N> <資料型別 N> = <值 N>
)

範例2:

package main

import (
    "fmt"
    "time"
)

var (
    isRain bool = false // 布林值
    month string = "September" // 字串
    today time.Time = time.Now()  // 日期
)

func main() { 
	fmt.Println(isRain, month, today)
}

範例2 (執行結果):

false September 2022-08-07 22:35:20.413023 +0800 CST m=+0.000132306

3.用 var 宣告省略型別或初始值的變數

在前面我們有提到宣告變數四寶,但事實上並不需要同時寫好型別和初始值,兩者可以擇一即可,因為今天當宣告變數時,只給型別而沒有初始值時, Go 會自動賦予此變數零值(zero value),反之,若只給初始值而沒有型別時,Go 會根據初始值來推斷型別。

範例3:

package main

import (
    "fmt"
    "time"
)

var (
    isRain bool // 省略初始值
    month = "September" // 省略型別
    today = time.Now()  // 省略型別
)

func main() { 
	fmt.Println(isRain, month, today)
}

範例3 執行結果:

false September 2022-08-07 22:49:11.553669 +0800 CST m=+0.000134740

3-1.也有推斷型別發生錯誤的時候

雖說省略初始值時, Go 會自動幫我們推斷型別,但也總會有推斷型別發生錯誤的時候,如下:

範例4:

package main

import "math/rand"
    
func main() {
    var seed = 1234456789
    rand.Seed(seed)
}

範例4 執行結果:

cannot use seed (variable of type int) as type int64 in argument to rand.Seed

為什麼噴錯了呢???在學習寫程式的時候,總常常會遇到錯誤訊息,但這時不要慌,仔細看看錯誤訊息,總會發現些蛛絲馬跡的!像上方的錯誤訊息就是再說他猜測 seed 的型別是 int ,但是 rand.Seed() 的參數卻是要 int64。
當我們看懂他想表達的,想必大家都知道要怎麼除錯了吧?!沒錯就是在宣告 seed 變數時,補上 int64 型別!

範例5:

package main

import "math/rand"
    
func main() {
    var seed int64 = 1234456789 //在這邊補上型別即正確
    rand.Seed(seed)
}

今天先介紹最基本的,用 var 宣告一個或多個變數 (variables) ,以及可以省略型別或是初始值,明天繼續介紹其他宣告變數的方式,那我們明天見~


上一篇
DAY 2 Go 語言 環境安裝 印出 Hello World
下一篇
DAY 4 Go 語言 用短變數宣告變數 (variables) 及更改變數值
系列文
跟著 Go 實戰聖經 一起自學 Go30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言